﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using DataAccessComponents;
using BusinessLogicLayer;
using System.Globalization;

namespace inzDesktop
{
    /// <summary>
    /// Interaction logic for windowSzczegolyKlienta.xaml
    /// </summary>
    public partial class windowSzczegolyKlienta : Window
    {
        private int id_klient;
        public windowSzczegolyKlienta()
        {
            InitializeComponent(); 
             
        }

        public void inicjalizujZawartosc(int id)
        {
           // KlientAdresBL kabl = new KlientAdresBL();
           // KlientAdres daneKlienta = kabl.pobierz(id);

            // Przekazywanie kontekstu o kliencie
            KlientBL klientBL = new KlientBL();
            Klient klient = klientBL.pobierz(id);
            klient.Czy_zmiana = false;
            this.DataContext = klient;

            // Zmiana tytułu okna
            this.Title = string.Format("{0} {1}", klient.Imie, klient.Nazwisko);
    

            // Dodawanie widoku do kontrolki od filtrowania
            filtrKlientUslugi.Widok = CollectionViewSource.GetDefaultView(klientBL.pobierzUslugiKlient(id));
            dataGridUslugiKlienta.ItemsSource = filtrKlientUslugi.Widok;

            // Przekazywanie nazw kolumn
            filtrKlientUslugi.cbNazwaColumny.ItemsSource = new String[] { "ID", "Oferta", "Kategoria"};
            // Dodawanie filtru            
            filtrKlientUslugi.Filtr = new Predicate<object>(filtrKlientUslugi.filtrListaKlientUslugi);


            this.id_klient = id;

            // Uzupełnianie cobobox listą województw
            IList<string> wojewodztwa = new List<String>();
            wojewodztwa.Add("mazowieckie");
            wojewodztwa.Add("podlaskie");
            wojewodztwa.Add("lubelskie");
            wojewodztwa.Add("śląskie");
            wojewodztwa.Add("pomorskie");
            wojewodztwa.Add("zachodnio-pomorskie");
            wojewodztwa.Add("kujawsko-pomorskie");
            wojewodztwa.Add("warmińsko-mazurskie");
            wojewodztwa.Add("lubuskie");
            wojewodztwa.Add("wielkopolskie");
            wojewodztwa.Add("małopolskie");
            wojewodztwa.Add("dolno-śląskie");
            wojewodztwa.Add("opolskie");
            wojewodztwa.Add("podkarpackie");
            wojewodztwa.Add("świętokrzyskie");
            wojewodztwa.Add("łódzkie");
            cbWojewodztwo.ItemsSource = wojewodztwa;

            //Płeć
            string[] plec = { "mężczyzna", "kobieta" };
            cbPlec.ItemsSource = plec;

            //Status
            StatusBL statusBL = new StatusBL();
            cbStatus.ItemsSource = statusBL.pobierzListe();


            
        }       

        private void btnOK_Click(object sender, RoutedEventArgs e)
        {
            if (Validacja.IsValid(this))
            {
                if (((Klient)this.DataContext).Czy_zmiana == true)
                {
                    System.Windows.MessageBoxResult wynik = System.Windows.MessageBox.Show("Czy zapisać zmiany?", "Uwaga!", MessageBoxButton.YesNoCancel, MessageBoxImage.Question);
                    if (wynik == MessageBoxResult.Yes)
                    {
                        zapiszZmianyKlient();
                        this.Close();
                    }
                    else if (wynik == MessageBoxResult.No)
                    {
                        this.Close();
                    }
                }
                else
                    this.Close();
            }
            else
            {
                MessageBox.Show("Wprowadzone zostały niepoprawne dane.", "Błąd", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void btnAnuluj_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void btnZapisz_Click(object sender, RoutedEventArgs e)
        {
            if (!Validacja.IsValid(this))
            {
                MessageBox.Show("Wprowadzone zostały niepoprawne dane.", "Błąd", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            else
            {
                zapiszZmianyKlient();
                MessageBox.Show("Zmiany zapisane pomyślnie", "Sukces", MessageBoxButton.OK, MessageBoxImage.Information);
            }
        }

        private void zapiszZmianyKlient()
        {
            KlientBL klientBL = new KlientBL();
            Klient klient = (Klient)this.DataContext;

            klientBL.aktualizuj(klient);           

        }

        private void gridKlient_Loaded(object sender, RoutedEventArgs e)
        {
           // InitializeComponent();
           // inicjalizujZawartosc(id_klient);
            
        }

        private void buttonSzczegoly_Click(object sender, RoutedEventArgs e)
        {
            KlientUslugi ku = dataGridUslugiKlienta.SelectedItem as KlientUslugi;
            windowSzczegolyRezerwacji wsr = new windowSzczegolyRezerwacji();
            wsr.inicjalizujZawartosc(ku.Id_rezerwacja);
            wsr.ShowDialog();
        }
    }

    public class EnumMatchToBooleanConverter : IValueConverter
    {
        public object Convert(object value, Type targetType,
            object parameter, CultureInfo culture)
        {
            
            if (value == null || parameter == null)
                return false;
            string checkValue = value.ToString();
            string targetValue = parameter.ToString();
            return checkValue.Equals(targetValue, StringComparison.InvariantCultureIgnoreCase);
        }
        public object ConvertBack(object value, Type targetType,
            object parameter, CultureInfo culture)
        {
            
            if (value == null || parameter == null)
                return null;

            bool useValue = (bool)value;
            string targetValue = parameter.ToString();
            
            if (useValue)
                return Boolean.Parse(targetValue);
           
            return null;
        }
        
    }
}
